const path=require('path')
const jsonServer=require('json-server')
const router=require('./router')
const db=require('./db')() //特殊，返回的是map对象
const tokenService=require('./service/token')

const server=jsonServer.create()

//中间件 静态资源、鉴权等
const middlewares=jsonServer.defaults({
    static:path.join(__dirname,'../public')
})

server.use(middlewares)
// req.body
server.use(jsonServer.bodyParser)

//鉴权
server.use((req,res,next)=>{
    if(tokenService.isAuthorized(req)){
        next()
    } else{
        res.sendStatus(401)
    }
})

//添加返回成功或失败的中间件格式
server.use((req,res,next)=>{
    const json=res.json.bind(res)
    res.success=(data)=>{
        return json({
            code: 0,
            msg:'请求成功',
            data
        })
    }
    res.fail=(msg,code=-1,data={})=>{
        return json(({
            code,
            msg,
            data
        }))
    }
    next()
})

// 路由第一种方式 
//router里面定义好路由地址和对应的执行函数
router(server)

// 路由第二种方式
const jsonServerRouter=jsonServer.router(db)
server.use('/api',jsonServerRouter) //这边路由可以添加前缀


server.listen(8001,()=>{
    console.log('JSON Server is running at 8001 port')
})
